
\pagebreak

\section{Modelado de restricciones de distancia}

Una vez tuvimos implementado el movimiento y la colisi\'on de las part\'iculas independientes, creamos un sistema de restricciones que nos permitiese crear cuerpos s\'olidos. Para ello lo primero que se implement\'o son las restricciones de distancia, que consisten en unir dos part\'oculas mediante lo que denominaremos hueso. Dicha restricci\'on \'unicamente se encarga es de que las dos part\'iculas implicadas se mantengan a una distancia constante la una de la otra, para ello utilizamos el siguiente c\'odigo:

\[dista = \sqrt[2]{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2}\]
\[dx = (x_1-x_2)\]
\[dy = (y_1-y_2)\]
\[dz = (z_1-z_2)\]

\[diff = dista-distance\]

\[x_1 = x_1-dx*0.5\]
\[y_1 = y_1-dy*0.5\]
\[z_1 = z_1-dz*0.5\]

\[x_2 = x_2+dx*0.5\]
\[y_2 = y_2+dy*0.5\]
\[z_2 = z_2+dz*0.5\]

Donde dx,dy y dz son la diferencia de las posiciones de cada una de las part\'iculas implicadas. {\em Distance} es la distancia a la cual deben estar dichas part\'iculas y {\em dista} es la distancia actual.
Como podemos observar, lo \'unico que se debe hacer para asegurar que se satisfacen las restricciones de distancia es mover cada una de las part\'iculas la mitad de la diferencia de distancias en direcci\'on opuesta.

Una vez implementadas las restricciones de distancia, observamos que con la estructura del bucle principal mencionado en el cap\'itulo anterior, al final de cada iteraci\'on no siempre se satisfacen todas las restricciones de distancia, puesto que si tenemos tres part\'iculas ( A,B,C ) y dos restricciones de distancia entre ellas (AB,BC), al satisfacer la restricci\'on AB puede darse el caso de que entonces inflijamos BC y al resolver BC volvamos a infligir AB. Es por eso que debimos modificar dicho bucle para que solamente acelerara una vez las part\'iculas pero comprobara n veces que se est\'an satisfaciendo las colisiones y las restricciones para que as\'i el sistema llegue a un estado estable en el que se satisfagan todas las restricciones y colisiones.
A continuaci\'on se muestra el pseudoc\'odigo del bucle principal:

\begin{verbatim}
	accelerar();
	for(i=0..n)
		colision();
		restriccion();
	end;
\end{verbatim}

En la siguiente figura se muestran dos part\'iculas unidas por una restricci'on de distancia. Una de ellas siempre fija. Se observa que el sistema es capaz de simular dichas part\'iculas satisfactoriamente:

\begin{figure}[here]
    \centering
    \includegraphics[scale=0.3]{figuras/prueba3.jpg}
	\caption{Restricci\'on de distancia}

 
\end{figure}